<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Sa-Token-SSO-Client端-登录页</title>
  <style type="text/css">

  </style>
</head>
<body>
<div class="login-box">

</div>
<script src="https://unpkg.zhimg.com/jquery@3.4.1/dist/jquery.min.js"></script>
<script>window.jQuery || alert('当前页面CDN服务商已宕机，请将所有js包更换为本地依赖')</script>
<script type="text/javascript">

  // 后端接口地址
  var baseUrl = "http://app1.sso.com:9001";

  var back = getParam('back', '/');
  var ticket = getParam('ticket');
  $(function() {
    if(ticket) {
      console.log("有ticket,根据ticket请求用户信息和登录token")
      doLoginByTicket(ticket);
    } else {
      console.log("没有ticket,需要获取sso登录跳转地址")
      goSsoAuthUrl();
    }
  })

  // 重定向至认证中心
  function goSsoAuthUrl() {
    sa.ajax('/getSsoAuthUrl', {clientLoginUrl: location.href}, function(res) {
      console.log(res);
      console.log("获取sso登录地址成功:",res.data,",开始跳转");
      location.href = res.data;
    })
  }

  // 根据ticket值登录
  function doLoginByTicket(ticket) {
    sa.ajax('/doLoginByTicket', {ticket: ticket}, function(res) {
      if(res.code == 200) {
        console.log("获取用户信息和token成功:",res);
        localStorage.setItem('satoken', res.data);
        location.href = decodeURIComponent(back);
      }
    })
  }

  // 从url中查询到指定名称的参数值
  function getParam(name, defaultValue){
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
      var pair = vars[i].split("=");
      if(pair[0] == name){return pair[1];}
    }
    return(defaultValue == undefined ? null : defaultValue);
  }

</script>
<script type="text/javascript">
  var sa = {};

  // 封装一下Ajax
  sa.ajax = function(url, data, successFn) {
    // sa.loading("正在努力加载...");
    $.ajax({
      url: baseUrl + url,
      type: "post",
      data: data,
      dataType: 'json',
      headers: {
        satoken: localStorage.getItem('satoken')
      },
      success: function(res){
        console.log('返回数据：', res);
        successFn(res);
      },
      error: function(xhr, type, errorThrown){
        if(xhr.status == 0){
          return alert('无法连接到服务器，请检查网络');
        }
        return alert("异常：" + JSON.stringify(xhr));
      }
    });
  }

</script>
</body>
</html>
